import axios from "axios";
import { getToken } from "@/composables/cookie"
import { showMessage} from '@/composables/util'
import { useUserStore } from '@/stores/user'

// 创建 Axios 实例
const instance = axios.create({
    baseURL: "/api", // 你的 API 基础 URL
    timeout: 320000, // 请求超时时间：320秒（约5.3分钟，为AI API调用预留充足时间）
})


// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    const token = getToken()
    console.log('统一添加请求头中的 Token:' + token)

    // 当 token 不为空时
    if (token) {
        // 添加请求头, key 为 Authorization，value 值的前缀为 'Bearer '
        config.headers['Authorization'] = 'Bearer ' + token
    }

    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
});

// 添加响应拦载器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response.data
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    let status = error.response?.status

    // 状态码 401
    if (status == 401) {
        // 只有在访问需要强认证的admin API时才退出登录
        const currentPath = window.location.pathname
        const isAdminRequest = error.config?.url?.includes('/admin/') || currentPath.startsWith('/admin')
        
        if (isAdminRequest) {
            // 后台管理区域的401，需要退出登录
            let userStore = useUserStore()
            userStore.logout()
            showMessage('登录已过期，请重新登录', 'warning')
            // 跳转到登录页
            window.location.href = '/login'
        } else {
            // 前台API的401，可能只是某个接口需要特殊权限，不强制退出
            const isStatisticsRequest = error.config?.url?.includes('/statistics/')
            if (isStatisticsRequest) {
                console.log('统计接口权限不足，用户可能不是管理员')
            } else {
                console.log('前台API访问权限不足，但不退出登录')
            }
        }
    } else if (status >= 500) {
        // 服务器错误才显示错误消息
        let errorMsg = error.response?.data?.message || '服务器内部错误'
        showMessage(errorMsg, 'error')
    } else if (status >= 400 && status < 500) {
        // 客户端错误，但不是401的情况
        const isStatisticsRequest = error.config?.url?.includes('/statistics/')
        if (!isStatisticsRequest) {
            // 非统计接口的4xx错误才显示错误消息
            let errorMsg = error.response?.data?.message || '请求失败'
            showMessage(errorMsg, 'error')
        }
    }

    return Promise.reject(error)
})

// 暴露出去
export default instance;
// 同时导出为 request，保持兼容性
export { instance as request };